home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 8363 < prev    next >
Encoding:
Text File  |  1996-08-05  |  1.4 KB  |  43 lines

  1. Path: wkaufman.us.oracle.com!wkaufman
  2. From: wkaufman@wkaufman.us.oracle.com (William Kaufman)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Problem Negating an Unsigned Char
  5. Date: 3 Mar 1996 17:54:10 GMT
  6. Organization: Oracle Corporation, Redwood Shores CA
  7. Message-ID: <4hcmc2$96l@inet-nntp-gw-1.us.oracle.com>
  8. References: <Dnnros.Lq.0.-s@hkusuc.hku.hk>
  9. NNTP-Posting-Host: wkaufman.us.oracle.com
  10.  
  11. In article <Dnnros.Lq.0.-s@hkusuc.hku.hk> h8716718@hkusua.hku.hk (Starry Hung) writes:
  12. ] unsigned char a=0x11;
  13. ] unsigned char b=0xEE;
  14. ] int c=0;
  15. ] void main( void ) {
  16. ]     if( a == ~b ) {
  17. ]       c=1;
  18. ]     }
  19. ] }
  20. ] The c remains unchange, while it changes to 1 if I cast the ~b to unsigned
  21. ] char as if( a == (unsigned char) ~b )
  22.  
  23.     I _think_ (check me, folks!) that "~" is one of the operators that
  24. promotes its operand to int.  So,
  25.  
  26.         ~(int)((unsigned char)0xEE) == 0xFF(...for sizeof(int) bytes...)11
  27.  
  28.     To match this type, "a" is also promoted to int, and, since it's
  29. less than UCHAR_MAX/2, there's no sign-extension--it's just 0x00..11.
  30. So the two don't compare equal.
  31.  
  32.     I guess you could work around it by declaring the variables as
  33. unsigned int instead,....
  34.  
  35.                                            -- Bill K.
  36.  
  37. Bill Kaufman             | "I mean ... it's not even been a two-and-two-make-
  38. wkaufman@us.oracle.com   |  five sort of day, it's more like a two-and-two-
  39.                          |  make ... *fish* ..."  -- "Cages", Dave McKean
  40.